<?php
/**
 * 模板引擎规则
*/

namespace houze\view\driver;

class Houze {
    /**
     * 模板引擎实例
    */
    private $template;

    /**
     * 初始化
    */
    public function __construct($config) {
        $this->template = new \houze\Template($config);
    }

    /**
     * 检测是否存在模板文件
    */
    public function exists($template) {
        if ('' == pathinfo($template, PATHINFO_EXTENSION)) {
            // 获取模板文件名
            $template = $this->parseTemplate($template);
        }

        return is_file($template);
    }

    /**
     * 渲染模板文件
    */
    public function fetch($template, $data = [], $config = []) {
        if ('' == pathinfo($template, PATHINFO_EXTENSION)) {
            // 获取模板文件名
            $template = $this->parseTemplate($template);
        }

        $this->template->fetch($template, $data, $config);
    }

    /**
     * 渲染模板内容
    */
    public function display($template, $data = [], $config = []) {
        $this->template->display($template, $data, $config);
    }

    /**
     * 自动定位模板文件
    */
    private function parseTemplate($template) {
        return $template;
    }

    /**
     * 配置或者获取模板引擎参数
    */
    public function config($name, $value = null) {
        if (is_array($name)) {
            $this->template->config($name);
            $this->config = array_merge($this->config, $name);
        } elseif (is_null($value)) {
            return $this->template->config($name);
        } else {
            $this->template->$name = $value;
            $this->config[$name]   = $value;
        }
    }

    /**
     * 当方法不存在时，指向模板解析类本身
    */
    public function __call($method, $params) {
        return call_user_func_array([$this->template, $method], $params);
    }
}